home *** CD-ROM | disk | FTP | other *** search
/ Chip 2011 November / CHIP_2011_11.iso / Programy / Inne / Gry / Carnage_Contest / scripts / CC Original / weapons / Parasite.lua < prev    next >
Text File  |  2010-09-22  |  8KB  |  231 lines

  1. --------------------------------------------------------------------------------
  2. -- Weapon Parasite + Projectile Parasite
  3. -- Original Carnage Contest Weapon
  4. -- Script by DC, September 2010, www.UnrealSoftware.de
  5. --------------------------------------------------------------------------------
  6.  
  7. -- Setup Tables
  8. if cc==nil then cc={} end
  9. cc.parasite={}
  10. cc.parasite.parasite={}
  11.  
  12. -- Load & Prepare Ressources
  13. cc.parasite.gfx_wpn0=loadgfx("weapons/parasite0.bmp")                    -- Weapon Image Frame 0
  14. setmidhandle(cc.parasite.gfx_wpn0)
  15. cc.parasite.gfx_wpn1=loadgfx("weapons/parasite1.bmp")                    -- Weapon Image Frame 1
  16. setmidhandle(cc.parasite.gfx_wpn1)
  17. cc.parasite.sfx_step=loadsfx("parasite.ogg")                            -- Sound
  18.  
  19.  
  20. --------------------------------------------------------------------------------
  21. -- Weapon: Parasite
  22. --------------------------------------------------------------------------------
  23.  
  24. cc.parasite.id=addweapon("cc.parasite","Parasite",cc.parasite.gfx_wpn0,0,3)    -- Add Weapon (0 uses, first in round 3)
  25.  
  26. function cc.parasite.draw()                                                    -- Draw
  27.     -- Draw
  28.     if weapon_shots<=0 then
  29.         -- Info
  30.         hudinfo("Hit [Space] once to launch the parasite!")
  31.         if getplayeraction(0)==0 then
  32.             setblend(blend_alpha)
  33.             setalpha(1)
  34.             setcolor(255,255,255)
  35.             setscale(getplayerdirection(0),1)
  36.             setrotation(-(20+math.sin(os.clock()*30)*15)*getplayerdirection(0))
  37.             drawimage(cc.parasite.gfx_wpn0,getplayerx(0)+getplayerdirection(0)*7,getplayery(0)-1)
  38.         end
  39.     end
  40. end
  41.  
  42. function cc.parasite.attack(attack)                                    -- Attack
  43.     if (weapon_shots<=0) then
  44.         -- Fire a projectile (on release/full charge)
  45.         if (attack==1) then
  46.             -- No more weapon switching!
  47.             useweapon(0)
  48.             -- No more player control!
  49.             playercontrol(0)
  50.             -- Set Round Time (15 sec)
  51.             secondsleft=math.floor(getframesleft()/50)
  52.             changeturntime(15-secondsleft)
  53.             -- Launch
  54.             weapon_shots=weapon_shots+1
  55.             id=createprojectile(cc.parasite.parasite.id)
  56.             projectiles[id]={}
  57.             -- Ignore collision with current player at beginning
  58.             projectiles[id].ignore=playercurrent()
  59.             -- Set initial position of projectile
  60.             projectiles[id].x=getplayerx(0)+getplayerdirection(0)*8
  61.             projectiles[id].y=getplayery(0)
  62.             if collision(col3x3,projectiles[id].x,projectiles[id].y)==1 then
  63.                 if terraincollision()==1 or objectcollision()>0 or playercollision()~=projectiles[id].ignore then
  64.                     projectiles[id].x=getplayerx(0)
  65.                 end
  66.             end
  67.             projectiles[id].px=projectiles[id].x
  68.             projectiles[id].py=projectiles[id].y
  69.             -- Set Speeds
  70.             projectiles[id].sy=0
  71.             -- Set direction of projectile
  72.             projectiles[id].dir=getplayerdirection(0)
  73.             -- Animation
  74.             projectiles[id].frame=0
  75.             projectiles[id].timer=0
  76.             projectiles[id].infection=0
  77.             -- Timer
  78.             weapon_timer=50
  79.             -- Sound
  80.             --playsound(cc.parasite.sfx_attack)
  81.         end
  82.     end
  83. end
  84.  
  85. --------------------------------------------------------------------------------
  86. -- Projectile: Parasite
  87. --------------------------------------------------------------------------------
  88.  
  89. cc.parasite.parasite.id=addprojectile("cc.parasite.parasite")        -- Add Projectile
  90.  
  91. function cc.parasite.parasite.draw(id)                    -- Draw
  92.     if projectiles[id].infection==0 then
  93.         -- Setup draw mode
  94.         setblend(blend_alpha)
  95.         setalpha(1)
  96.         setcolor(255,255,255)
  97.         setscale(1,1)
  98.         -- Calculate projectile rotation
  99.         if projectiles[id].dir==1 then
  100.             setrotation(math.deg(math.atan2(projectiles[id].x-projectiles[id].px,-(projectiles[id].y-projectiles[id].py)))+270)
  101.         else
  102.             setscale(1,-1)
  103.             setrotation(math.deg(math.atan2(projectiles[id].x-projectiles[id].px,-(projectiles[id].y-projectiles[id].py)))-90)
  104.         end
  105.         -- Draw projectile
  106.         if projectiles[id].frame==0 then
  107.             drawimage(cc.parasite.gfx_wpn0,projectiles[id].x,projectiles[id].y-2)
  108.         else
  109.             drawimage(cc.parasite.gfx_wpn1,projectiles[id].x,projectiles[id].y-2)
  110.         end
  111.         -- Draw Arrow if out of Screen
  112.         outofscreenarrow(projectiles[id].x,projectiles[id].y)
  113.         -- Info
  114.         hudinfo("Hit [Space] again to detonate the parasite!")
  115.     end
  116. end
  117.  
  118. function cc.parasite.parasite.update(id)                            -- Update
  119.     if projectiles[id].infection==0 then
  120.         -- Save old position (for rotation calculation)
  121.         if getframesleft()%15==0 then
  122.             projectiles[id].px=projectiles[id].x
  123.             projectiles[id].py=projectiles[id].y
  124.             playsound(cc.parasite.sfx_step)
  125.         end
  126.         -- Timer
  127.         weapon_timer=weapon_timer-1
  128.         -- Animation
  129.         projectiles[id].timer=projectiles[id].timer+1
  130.         if projectiles[id].timer>14 then
  131.             projectiles[id].timer=0
  132.             projectiles[id].frame=1-projectiles[id].frame
  133.         end
  134.         -- Move Left/Right
  135.         projectiles[id].x=projectiles[id].x+projectiles[id].dir*0.5
  136.         if collision(col3x3,projectiles[id].x,projectiles[id].y)==1 then
  137.             if terraincollision()==1 or objectcollision()>0 or playercollision()~=projectiles[id].ignore then
  138.                 -- Infect
  139.                 collision(col10x10,projectiles[id].x,projectiles[id].y,0,1,0)
  140.                 if playercollision()~=0 and playercollision()~=projectiles[id].ignore then
  141.                     projectiles[id].infection=playercollision()
  142.                     weapon_timer=0
  143.                     playsound(sfx_splatter3)
  144.                     playerstate(projectiles[id].infection,state_confused,1)
  145.                     -- End Turn
  146.                     endturn()
  147.                 end
  148.                 -- Upwards/Downwards space?
  149.                 doturn=1
  150.                 for i=1,14,1 do
  151.                     if (i%2)==1 then offset=(i+1)/2 else offset=-(i/2) end
  152.                     if collision(col3x3,projectiles[id].x,projectiles[id].y+offset)==0 then
  153.                         doturn=0; projectiles[id].ignore=0 projectiles[id].y=projectiles[id].y+offset; break
  154.                     elseif terraincollision()==0 and objectcollision()>0 and playercollision()==projectiles[id].ignore then
  155.                         doturn=0; projectiles[id].y=projectiles[id].y+offset; break
  156.                     end
  157.                 end
  158.                 if doturn==1 then
  159.                     -- Move Back / Turn
  160.                     projectiles[id].x=projectiles[id].x-projectiles[id].dir*0.5
  161.                     projectiles[id].dir=projectiles[id].dir*(-1)
  162.                     projectiles[id].px=projectiles[id].x
  163.                     projectiles[id].py=projectiles[id].y
  164.                 end
  165.             end
  166.         else
  167.             projectiles[id].ignore=0
  168.         end
  169.         if projectiles[id].infection==0 then
  170.             -- Fall Down
  171.             projectiles[id].sy=projectiles[id].sy+getgravity()*2
  172.             msubt=math.ceil(math.abs(projectiles[id].sy)/3)
  173.             msuby=projectiles[id].sy/msubt
  174.             for i=1,msubt,1 do
  175.                 projectiles[id].y=projectiles[id].y+msuby
  176.                 -- Collision
  177.                 if collision(col3x3,projectiles[id].x,projectiles[id].y)==1 then
  178.                     if terraincollision()==1 or objectcollision()>0 or playercollision()~=projectiles[id].ignore then
  179.                         projectiles[id].sy=0
  180.                         projectiles[id].y=projectiles[id].y-msuby
  181.                         break
  182.                     end
  183.                 else
  184.                     projectiles[id].ignore=0
  185.                 end
  186.                 -- Water
  187.                 if (projectiles[id].y)>getwatery() then
  188.                     playsound(sfx_waterstep)
  189.                     -- Free projectile
  190.                     freeprojectile(id)
  191.                     -- End Turn
  192.                     endturn()
  193.                     return
  194.                 end
  195.             end
  196.             -- Timer / Explode
  197.             if getframesleft()<5 or (weapon_timer<=0 and keydown(key_attack)==1) then
  198.                 -- Splatter
  199.                 playsound(sfx_splatter2)
  200.                 -- Dirt
  201.                 terrainalphaimage(gfx_blood50,projectiles[id].x,projectiles[id].y,0.8,255,255,0)
  202.                 particle(p_smoke,projectiles[id].x,projectiles[id].y)
  203.                 particlealpha(1.0)
  204.                 particlecolor(255,255,0)
  205.                 particlesize(10,10)
  206.                 particlefadealpha(0.01)
  207.                 for i=1,5,1 do
  208.                     particle(p_blood,projectiles[id].x,projectiles[id].y)
  209.                     particlecolor(255,255,0)
  210.                 end
  211.                 -- Free projectile
  212.                 freeprojectile(id)
  213.                 -- End Turn
  214.                 endturn()
  215.             end
  216.         end
  217.     end
  218.     -- Infection
  219.     if projectiles[id].infection>0 then
  220.         weapon_timer=weapon_timer+1
  221.         if weapon_timer>(50*3) then
  222.             -- Kill Infected
  223.             playerdamage(projectiles[id].infection,10000)
  224.             playsound(sfx_splatter2)
  225.             -- Free projectile
  226.             freeprojectile(id)
  227.         end
  228.     end
  229.     -- Scroll to projectile
  230.     scroll(projectiles[id].x,projectiles[id].y)
  231. end